const config = require('../config/server');

// 缓存中间件
const cacheMiddleware = (req, res, next) => {
    const url = req.url;
    
    // 设置默认缓存头
    res.set({
        'X-Content-Type-Options': 'nosniff',
        'X-Frame-Options': 'DENY',
        'X-XSS-Protection': '1; mode=block'
    });
    
    // 根据文件类型设置不同的缓存策略
    if (url.includes('/static/')) {
        // 静态资源（CSS、JS、图片等）
        if (url.match(/\.(css|js|png|jpg|jpeg|gif|svg|ico|woff|woff2|ttf|eot)$/)) {
            res.set({
                'Cache-Control': `public, max-age=${config.cache.staticMaxAge}`,
                'Expires': new Date(Date.now() + config.cache.staticMaxAge * 1000).toUTCString()
            });
        }
        // HTML文件
        else if (url.match(/\.html?$/)) {
            res.set({
                'Cache-Control': `public, max-age=${config.cache.htmlMaxAge}`,
                'Expires': new Date(Date.now() + config.cache.htmlMaxAge * 1000).toUTCString()
            });
        }
        // 其他文件
        else {
            res.set({
                'Cache-Control': 'public, max-age=3600', // 1小时
                'Expires': new Date(Date.now() + 3600 * 1000).toUTCString()
            });
        }
    }
    // API接口
    else if (url.startsWith('/api/')) {
        if (url.includes('version') || url.includes('health')) {
            // 版本和健康检查接口缓存时间较短
            res.set({
                'Cache-Control': `public, max-age=${config.cache.versionMaxAge}`,
                'Expires': new Date(Date.now() + config.cache.versionMaxAge * 1000).toUTCString()
            });
        } else {
            // 其他API接口不缓存
            res.set({
                'Cache-Control': 'no-cache, no-store, must-revalidate',
                'Pragma': 'no-cache',
                'Expires': '0'
            });
        }
    }
    
    next();
};

module.exports = cacheMiddleware;
